package com.example.warehouse.bus.dao.persist.repository;

import com.example.warehouse.bus.pojo.entity.BusCustomer;
import com.example.warehouse.bus.pojo.entity.BusProvider;
import com.example.warehouse.bus.pojo.vo.BusCustomerStandardVO;
import com.example.warehouse.bus.pojo.vo.BusProviderStandardVO;
import com.example.warehouse.common.pojo.vo.PageData;

import java.util.List;

/**
 * @author Linger
 * @date 2023-07-07 8:55
 * @desciption: 处理供应商数据的接口
 */
public interface IBusProviderRepository {
    /**
     *
     * @param busProvider 供应商数据
     * @return 受影响的行数
     */
    int insert(BusProvider busProvider);

    /**
     *
     * 根据供应商名统计供应商数据的数量
     *
     * @param providerName 公司名
     * @return 匹配供应商名的供应商数据的数据
     */
    int countByProviderName(String providerName);

    /**
     *
     * 统计供应商手机号码的数量
     *
     * @param phone 手机号码
     * @return 匹配供应商名的供应商数据的数据
     */
    int countByProviderPhone(String phone);
    /**
     *
     * 统计供应商电子邮箱的数量
     *
     * @param email 电子邮箱
     * @return 匹配供应商电子邮箱名的数量
     */
    int countByProviderEmail(String email);

    /**
     * 根据id删除供应商数据
     *
     * @param id 供应商id
     * @return 受影响的行数
     */
    int deleteByProviderId(Long id);

    /**
     * 根据id修改供应商的数据
     *
     * @param  busProvider 封装了供应商id和新的数据的对象
     * @return 受影响的行数
     */

    int update(BusProvider busProvider);


    /**
     * 根据id查询供应商数据详情
     *
     * @param id id
     * @return 匹配的供应商数据详情，如果没有匹配的数据，则返回null
     */
    BusProviderStandardVO getStandardByProviderId(Long id);

    /**
     * 模糊查询
     *
     * @param providerName    供应商名称
     * @param connectionPerson 联系人姓名
     * @param phone            联系人手机号
     * @return 查询结果列表
     */
    PageData<BusProviderStandardVO> queryByKeyWord(Integer pageNum, Integer pageSize,String providerName, String connectionPerson, String phone);

    /**
     * 查询供应商数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 供应商数据列表
     */
    PageData<BusProvider> list(Integer pageNum, Integer pageSize);
    /**
     * 升序查询供应商数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 供应商数据列表
     */
    PageData<BusProvider> listAsc(Integer pageNum, Integer pageSize);

    /**
     * 降序查询供应商数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 供应商数据列表
     */
    PageData<BusProvider> listDesc(Integer pageNum, Integer pageSize);

    int updateByProviderId(BusProvider user);
}
